package com.satan.juc.demo22;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @Author: Demon
 * @Date: 2024/3/29 21:27
 * @Description: SingleThreadScheduledExecutor: 单线程的ScheduledThreadPool。
 **/
public class SingleThreadScheduledExecutorExample {
    public static void main(String[] args) {
        // 创建一个SingleThreadScheduledExecutor
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

        // 创建一个Runnable任务
        Runnable task = () -> System.out.println(Thread.currentThread().getName()+"执行任务时间: " + System.currentTimeMillis());

        // 安排任务在延迟1秒后执行
//        executor.schedule(task, 1, TimeUnit.SECONDS);

        // 安排一个周期性执行的任务，每隔3秒执行一次
//        executor.scheduleAtFixedRate(task, 1, 3, TimeUnit.SECONDS);

        // 安排一个周期性执行的任务，在上一个任务执行结束后一定延迟再次执行
        executor.scheduleWithFixedDelay(task, 1, 3, TimeUnit.SECONDS);

        // 为了演示，我们让程序运行5秒后关闭
        try {
            TimeUnit.MINUTES.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 关闭线程池
        executor.shutdown();
    }
}
